package 栈;

import java.util.Stack;

/*
最小栈:
    设计一个支持push pop top操作,并能在常数时间内检索到最小元素的栈
    实现类:
        1.初始化堆栈对象
        2.将元素val推入堆栈
        3.删除堆栈顶部的元素
        4.获取堆栈顶部的元素
        5.获取堆栈中的最小元素
    思路:
        1.普通栈 一定要存储数据
        2.最小栈   如果是第一次存储数据直接放.否则需要和最小栈的栈顶元素去比较  <  的时候才能进   等于的时候也要放
 */
public class MinStack {

    public Stack<Integer> stack;
    public Stack<Integer> minStack;
    public MinStack() {
        stack = new Stack<>();
        minStack = new Stack<>();
    }

    public void push(int val) {
        stack.push(val);
        if(minStack.isEmpty()){
            minStack.push(val);
        }else{
            int flag = minStack.peek();
            if(val<=flag){
                minStack.push(val);
            }
        }
    }

    public void pop() {
        int flag = stack.pop();
        if(flag ==minStack.peek()){
            minStack.pop();
        }
    }

    public int top() {
        return stack.peek();
    }

    public int getMin() {
        return minStack.peek();
    }

}
